﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PGI.LN.Inventario;
using PGI.LN.Producto;
using PGI.EN.Inventario;
using PGI.EN.Producto;
using PGI.EN.Usuario;


namespace PGI.WF
{
    public partial class FrmInventarioCompras : Form
    {
        private int filas = -1;
        public int EstadoInventario = 0;
        private bool ddlCargado = false;
        public UsuarioEn usuarioForm;
        private List<OpcionProductoEn> Tallas = null;
        private List<OpcionProductoEn> Colores = null;
        private List<OpcionProductoEn> Materiales = null;
        private List<OpcionProductoEn> Temporadas = null;

        public FrmInventarioCompras()
        {
            InitializeComponent();
        }

        private void FrmInventarioCompras_Load(object sender, EventArgs e)
        {
            Tallas = OpcionProductoLn.ConsultaOpcionProducto(2);
            Colores = OpcionProductoLn.ConsultaOpcionProducto(3);
            Materiales = OpcionProductoLn.ConsultaOpcionProducto(4);
            Temporadas = OpcionProductoLn.ConsultaOpcionProducto(5);
            
            
            for (int j = 0; j < 8; j++)
                dgwInventarioCompras.Columns[j].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;

        }  
        
        private void dgwProductosIns_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            //Operacion

            double Cantidad = 0;
            double Costo_Unitario = 0;
            double PrecioVenta = 0;

            if (dgwInventarioCompras.Rows[e.RowIndex].Cells[5].Value != null)
            {
                if (dgwInventarioCompras.Rows[e.RowIndex].Cells[5].Value.ToString() != "")
                    //Cantidad = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[5].Value.ToString().Replace('.', ','));
                    Cantidad = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[5].Value.ToString());
            }

            if (dgwInventarioCompras.Rows[e.RowIndex].Cells[6].Value != null)
            {
                if (dgwInventarioCompras.Rows[e.RowIndex].Cells[6].Value.ToString() != "")
                    //Costo_Unitario = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[6].Value.ToString().Replace('.', ','));
                    Costo_Unitario = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[6].Value.ToString());
            }

            if (dgwInventarioCompras.Rows[e.RowIndex].Cells[7].Value != null)
            {
                if (dgwInventarioCompras.Rows[e.RowIndex].Cells[7].Value.ToString() != "")
                    //PrecioVenta = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[7].Value.ToString().Replace('.', ','));
                    PrecioVenta = Convert.ToDouble(dgwInventarioCompras.Rows[e.RowIndex].Cells[7].Value.ToString());
            }

            double total_Compra = Cantidad * Costo_Unitario;
            double total_Venta = Cantidad * PrecioVenta;


            dgwInventarioCompras.Rows[e.RowIndex].Cells[8].Value = total_Compra.ToString("C2");
            dgwInventarioCompras.Rows[e.RowIndex].Cells[9].Value = total_Venta.ToString("C2");
            

        }

        private void dgwProductosIns_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            filas--;
        }       

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == DialogResult.Yes)
                this.Dispose();
        }

        private void FrmInventarioCompras_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!this.IsDisposed)
            {
                DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                    this.Dispose();
                else
                    e.Cancel = true;
            }
        }

        private void FrmInventarioCompras_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
                btnCerrar_Click(sender, e);

            if (e.KeyCode == Keys.F1)
                btnInsertarCompra_Click(sender, e);

            //dgwInventarioCompras.RowsAdded -= new DataGridViewRowsAddedEventHandler(dgwInventarioCompras_RowsAdded);
            if (e.KeyCode == Keys.Enter)
            {
                string codigo = "";

                if (dgwInventarioCompras.Rows[filas].Cells[1].Value != null)
                {

                    codigo = dgwInventarioCompras.Rows[filas].Cells[1].Value.ToString();

                    List<InventarioProductoEn> lstprodInventario = new List<InventarioProductoEn>();

                    InventarioProductoEn InventarioProductoEn = InventarioProductoLn.InvProducto(codigo);

                    if (InventarioProductoEn != null)
                    {
                        dgwInventarioCompras.Rows[filas].Cells[0].Value = InventarioProductoEn.ProductoID;
                        dgwInventarioCompras.Rows[filas].Cells[1].Value = InventarioProductoEn.CodBarra;
                        dgwInventarioCompras.Rows[filas].Cells[2].Value = InventarioProductoEn.DescripcionProd;
                        dgwInventarioCompras.Rows[filas].Cells[3].Value = InventarioProductoEn.DescripcionCat;
                        dgwInventarioCompras.Rows[filas].Cells[4].Value = InventarioProductoEn.StockMinimo;

                        if (!ddlCargado)
                        {
                            DataGridViewComboBoxColumn[] columnas = new DataGridViewComboBoxColumn[4];

                            DataGridViewComboBoxColumn cbTalla = new DataGridViewComboBoxColumn();
                            cbTalla.HeaderText = "Talla";
                            cbTalla.Name = "Talla";
                            cbTalla.DataSource = Tallas;
                            cbTalla.ValueMember = "OpcionID";
                            cbTalla.DisplayMember = "Descripcion";
                            cbTalla.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[0] = cbTalla;

                            DataGridViewComboBoxColumn cbColor = new DataGridViewComboBoxColumn();
                            cbColor.HeaderText = "Color";
                            cbColor.Name = "Color";
                            cbColor.DataSource = Colores;
                            cbColor.ValueMember = "OpcionID";
                            cbColor.DisplayMember = "Descripcion";
                            cbColor.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[1] = cbColor;

                            DataGridViewComboBoxColumn cbMaterial = new DataGridViewComboBoxColumn();
                            cbMaterial.HeaderText = "Material";
                            cbMaterial.Name = "Material";
                            cbMaterial.DataSource = Materiales;
                            cbMaterial.ValueMember = "OpcionID";
                            cbMaterial.DisplayMember = "Descripcion";
                            cbMaterial.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[2] = cbMaterial;

                            DataGridViewComboBoxColumn cbTemporada = new DataGridViewComboBoxColumn();
                            cbTemporada.HeaderText = "Temporada";
                            cbTemporada.Name = "Temporada";
                            cbTemporada.DataSource = Temporadas;
                            cbTemporada.ValueMember = "OpcionID";
                            cbTemporada.DisplayMember = "Descripcion";
                            cbTemporada.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                            columnas[3] = cbTemporada;
                                                                                  

                            dgwInventarioCompras.Columns.AddRange(columnas);
                            ddlCargado = true;
                        }

                        //dgwInventarioCompras.RowsAdded += new DataGridViewRowsAddedEventHandler(dgwInventarioCompras_RowsAdded);
                        //filas = filas + 1;
                    }

                    else
                    {

                        DialogResult dr = MessageBox.Show(this, "¿El código ingresado no corresponde con ninguno en la base de datos. Desea agregar un producto nuevo con este código?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        if (dr == DialogResult.Yes)
                        {

                            FrmProductoInsertar frmInsProd = FrmProductoInsertar.Instance();
                            frmInsProd.prodObj = new ProductoEn();
                            frmInsProd.prodObj.CodBarra = codigo;
                            frmInsProd.EstadoForm = 4;
                            frmInsProd.ShowDialog();
                            frmInsProd.Activate();

                            FrmInventarioCompras_KeyUp(sender, e);

                        }

                    }
                }
            }
        }

        private void dgwInventarioCompras_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {   
            if (dgwInventarioCompras.CurrentCell.ColumnIndex == 6 || dgwInventarioCompras.CurrentCell.ColumnIndex == 7)      //Costo Unitario 
            {

                
                //e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPressNumconPunto);

                //TextBox txt = e.Control as TextBox;
                //if (txt != null)
                //{
                //    txt.KeyPress += new KeyPressEventHandler(itemID_KeyPressNumconPunto);
                //}


                e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPressSoloNum);
                e.Control.KeyPress += new KeyPressEventHandler(itemID_KeyPressNumconPunto);
            }
            if (dgwInventarioCompras.CurrentCell.ColumnIndex == 5)     //Cantidad
            {
                //e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPressSoloNum);

                //TextBox txtSolNum = e.Control as TextBox;
                //if (txtSolNum != null)
                //{
                //    txtSolNum.KeyPress += new KeyPressEventHandler(itemID_KeyPressSoloNum);
                //}


                e.Control.KeyPress -= new KeyPressEventHandler(itemID_KeyPressNumconPunto);
                e.Control.KeyPress += new KeyPressEventHandler(itemID_KeyPressSoloNum);
            }
        }

        private void itemID_KeyPressNumconPunto(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
        }

        private void itemID_KeyPressSoloNum(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }            
        }

        private void btnInsertarCompra_Click(object sender, EventArgs e)
        {
            if (dgwInventarioCompras.Rows.Count == 1)
            {
                if (dgwInventarioCompras.Rows[0].Cells[1].Value == null)
                    MessageBox.Show(this, "Aún no se ha ingresado información a la tabla para ser guardada", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            else
            {
                string error = ValidarValoresGrilla(dgwInventarioCompras);
                if (error == "")
                {
                    int columnas_fijas = dgwInventarioCompras.ColumnCount - 4;
                    for (int i = 0; i < dgwInventarioCompras.RowCount - 1; i++)
                    {
                        List<int> lstOpciones = new List<int>();

                        //--------------Llenar objeto de Movimiento---------------------------------------------

                        MovimientoInventarioEn movimiento = new MovimientoInventarioEn();
                        //NECESITO TRAER EL PRODUCTOID MAS BREVE (MEJOR MOSTRARLO EN LA TABLA)
                        movimiento.ProductoID = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[0].FormattedValue.ToString());
                        movimiento.UsuarioID = usuarioForm.UsuarioID;
                        movimiento.TipoMovimiento = 1; //1:Compra, 2:Venta, 3:Baja
                        movimiento.Cantidad = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[5].FormattedValue);
                        movimiento.CostoUnitario = Convert.ToDouble(dgwInventarioCompras.Rows[i].Cells[6].FormattedValue);
                        movimiento.PrecioVenta = Convert.ToDouble(dgwInventarioCompras.Rows[i].Cells[7].FormattedValue);
                        movimiento.TallaID = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[10].Value);
                        movimiento.ColorID = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[11].Value);
                        movimiento.MaterialID = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[12].Value);
                        movimiento.TemporadaID = Convert.ToInt32(dgwInventarioCompras.Rows[i].Cells[13].Value);

                        int MovimientoID = InventarioLn.InsertarMovimiento(movimiento);

                        //---------------------------------------------------------------------------------------
                    }

                    MessageBox.Show(this, "Se ha guardado con éxito la compra.");
                    this.Close();
                }
                else
                {
                    MessageBox.Show(this, error, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private string ValidarValoresGrilla(DataGridView dgv)
        {
            string error = "";
            
            int columnas_fijas = dgv.Columns.Count - 4;
            
            for (int i = 0; i < dgv.Rows.Count -1; i++)
            {
                if (dgv.Rows[i].Cells[5].FormattedValue.ToString() == "" || Convert.ToInt32(dgv.Rows[i].Cells[5].FormattedValue) <= 0)
                    error += "- El valor debe ser mayor a cero (Columna: "+ dgv.Columns[5].HeaderText.Replace("_"," ") +", Fila: " + (i+1).ToString() +")\n";
                if (dgv.Rows[i].Cells[6].FormattedValue.ToString() == "" || Convert.ToDouble(dgv.Rows[i].Cells[6].FormattedValue) <= 0)
                    error += "- El valor debe ser mayor a cero (Columna: " + dgv.Columns[6].HeaderText.Replace("_", " ") + ", Fila: " + (i + 1).ToString() + ")\n";
                if (dgv.Rows[i].Cells[7].FormattedValue.ToString() == "" || Convert.ToDouble(dgv.Rows[i].Cells[7].FormattedValue) <= 0)
                    error += "- El valor debe ser mayor a cero (Columna: " + dgv.Columns[7].HeaderText.Replace("_", " ") + ", Fila: " + (i + 1).ToString() + ")\n";
                
                for (int j = columnas_fijas; j < dgv.Columns.Count; j++)
                {
                    if(Convert.ToInt32(dgv.Rows[i].Cells[j].Value) == 0)
                        error += "- Debe seleccionar un valor. (Columna: " + dgv.Columns[j].HeaderText.Replace("_", " ") + ", Fila: " + (i + 1).ToString() + ")\n";
                }

            }

            return error;
        }

        private void dgwInventarioCompras_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            filas = filas + 1;
        }         
        
    }
}
